import { keyframes } from "@vanilla-extract/css"

/**
 * Animation keyframes
 * Used throughout the component library for consistent motion
 */

export const fadeIn = keyframes({
	from: { opacity: 0 },
	to: { opacity: 1 },
})

export const fadeOut = keyframes({
	from: { opacity: 1 },
	to: { opacity: 0 },
})

export const slideInFromRight = keyframes({
	from: {
		transform: "translateX(100%)",
		opacity: 0,
	},
	to: {
		transform: "translateX(0)",
		opacity: 1,
	},
})

export const slideInFromLeft = keyframes({
	from: {
		transform: "translateX(-100%)",
		opacity: 0,
	},
	to: {
		transform: "translateX(0)",
		opacity: 1,
	},
})

export const slideInFromTop = keyframes({
	from: {
		transform: "translateY(-100%)",
		opacity: 0,
	},
	to: {
		transform: "translateY(0)",
		opacity: 1,
	},
})

export const slideInFromBottom = keyframes({
	from: {
		transform: "translateY(100%)",
		opacity: 0,
	},
	to: {
		transform: "translateY(0)",
		opacity: 1,
	},
})

export const spin = keyframes({
	from: { transform: "rotate(0deg)" },
	to: { transform: "rotate(360deg)" },
})

export const pulse = keyframes({
	"0%, 100%": {
		opacity: 1,
	},
	"50%": {
		opacity: 0.5,
	},
})

export const bounce = keyframes({
	"0%, 100%": {
		transform: "translateY(-25%)",
		animationTimingFunction: "cubic-bezier(0.8, 0, 1, 1)",
	},
	"50%": {
		transform: "translateY(0)",
		animationTimingFunction: "cubic-bezier(0, 0, 0.2, 1)",
	},
})

export const scaleIn = keyframes({
	from: {
		transform: "scale(0.95)",
		opacity: 0,
	},
	to: {
		transform: "scale(1)",
		opacity: 1,
	},
})

export const scaleOut = keyframes({
	from: {
		transform: "scale(1)",
		opacity: 1,
	},
	to: {
		transform: "scale(0.95)",
		opacity: 0,
	},
})

export const shimmer = keyframes({
	"0%": {
		backgroundPosition: "-1000px 0",
	},
	"100%": {
		backgroundPosition: "1000px 0",
	},
})
